/*
  使用let声明变量
    1. let声明的变量不会挂载到全局对象

    2. let声明的变量，不允许当前作用域范围内重复声明
    
    3. ES6不仅引入了let关键字用于解决变量声明的问题，同时引入了块级作用域
      底层实现上，let声明的变量实际上也会有提升，但是，提升后会将其放入到“暂时性死区”, 如果访问的变量位于暂时性死区，则会
        报错：“Cannot access 'xxx' before initialization”。当代码运行到该变量的声明语句时，会将其从暂时性死区中移除

      在循环中，用let声明的循环变量，会特殊处理，每次进入循环体，都会开启一个新的作用域，并且将循环变量绑定到该作用域
      （每次循环，使用的是一个全新的循环变量），循环中使用let声明的循环变量，在循环结束后会销毁

  使用const声明常量
    const和let完全相同，仅用于const声明的变量，必须在声明时赋值（不赋值直接保存），而且不可以重新赋值。实际上，在开发中，
    应该尽量使用const来声明变量，以保证变量的值不会随意篡改
*/
let a = "abc";
console.log(window.a);

const div = document.getElementById("divButtons");
for (let i = 0; i <= 10; i++) {
  const btn = document.createElement("button");
  btn.innerHTML = `按钮${i}`;
  div.appendChild(btn);
  btn.onclick = function () {
    console.log(`当前按钮${i}`);
  };
}
